"""
GIL（Global Interpreter Lock）[cpython] （并发受限）

核心知识：
    1.Python中一个线程对应于c语言中的一个线程。
    2.GIL使得同一个时刻只有一个线程在一个CPU上执行字节码，无法将多个线程映射到多个CPU上执行。
    3.GIL会根据执行的字节码行数以及时间片进行释放。
    4.GIL遇到IO操作时会主动释放。
"""

import dis
import threading


def add(n):
    n += 1


def use_dis():
    dis.dis(add)
    # 输出结果：
    """
     13       0 LOAD_FAST                0 (n)
              3 LOAD_CONST               1 (1)
              6 INPLACE_ADD
              7 STORE_FAST               0 (n)
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE
    """


total = 0


def add_func():
    global total
    for i in range(100000):
        total += 1


def desc_func():
    global total
    for i in range(100000):
        total -= 1


def use_thread():
    t1 = threading.Thread(target=add_func)
    t2 = threading.Thread(target=add_func)

    t1.start()
    t2.start()

    t1.join()
    t2.join()
    print("total = ", total)
    # 输出结果：
    """
    total =  162702
    """


if __name__ == '__main__':
    use_dis()
    use_thread()
